package com.njmaomao.gj.pyot.domain.wechat.wechatapi.unifiedorder;

import com.njmaomao.gj.pyot.domain.wechat.wechatapi.ApiResp;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import java.util.Optional;

/**
 * 公众号统一下单响应结果
 * @author hh 2018-5-10
 */
@XStreamAlias("xml")
public class UnifiedorderResp implements ApiResp {

    // 返回状态码 必填[是] SUCCESS/FAIL 此字段是通信标识，非交易标识，交易是否成功需要查看result_code来判断
    @XStreamAlias("return_code")
    private String returnCode;

    // 返回信息 必填[否] 返回信息，如非空，为错误原因
    @XStreamAlias("return_msg")
    private String returnMsg;

    // 公众账号ID 必填[是] 调用接口提交的公众账号ID
    private String appid;

    // 商户号 必填[是] 调用接口提交的商户号
    @XStreamAlias("mch_id")
    private String mchId;

    // 设备号 必填[否] 自定义参数，可以为请求支付的终端设备号等
    @XStreamAlias("device_info")
    private String deviceInfo;

    // 随机字符串 必填[是] 微信返回的随机字符串
    @XStreamAlias("nonce_str")
    private String nonceStr;

    // 签名 必填[是] 微信返回的签名值，详见签名算法
    private String sign;

    // 业务结果 必填[是] SUCCESS/FAIL
    @XStreamAlias("result_code")
    private String resultCode;

    // 错误代码 必填[否] 详细参见下文错误列表
    @XStreamAlias("err_code")
    private String errCode;

    // 错误代码描述 必填[否] 错误信息描述
    @XStreamAlias("err_code_des")
    private String errCodeDes;

    // 交易类型 必填[是] JSAPI-公众号支付 NATIVE-扫码支付 APP-APP支付 说明详见参数规定
    @XStreamAlias("trade_type")
    private String tradeType;

    // 预支付交易会话标识 必填[是] 微信生成的预支付会话标识，用于后续接口调用中使用，该值有效期为2小时
    @XStreamAlias("prepay_id")
    private String prepayId;

    // 二维码链接 必填[否] trade_type为NATIVE时有返回，用于生成二维码，展示给用户进行扫码支付
    @XStreamAlias("code_url")
    private String codeUrl;

    public String getReturnCode() {
        return returnCode;
    }

    public Optional<String> getReturnMsg() {
        return Optional.ofNullable(returnMsg);
    }

    public String getAppid() {
        return appid;
    }

    public String getMchId() {
        return mchId;
    }

    public Optional<String> getDeviceInfo() {
        return Optional.ofNullable(deviceInfo);
    }

    public String getNonceStr() {
        return nonceStr;
    }

    public String getSign() {
        return sign;
    }

    @Override
    public String getResultCode() {
        return this.resultCode;
    }

    @Override
    public String getErrCode() {
        return this.errCode;
    }

    @Override
    public String getErrCodeDes() {
        return this.errCodeDes;
    }

    public String getTradeType() {
        return tradeType;
    }

    public String getPrepayId() {
        return prepayId;
    }

    public Optional<String> getCodeUrl() {
        return Optional.ofNullable(codeUrl);
    }

}
